package com.tool.cn.use;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;

import com.tool.cn.util.DateUtil;



/**
 * 超时设置类
 * @author wangzh
 * @date 2018年10月23日 上午10:52:01
 */
public final class TimeHashMap {
	
	private static Map<Long,List<String>> dataMap=new HashMap<>();
	private static Map<String,Integer> fileNum=new HashMap<>();
	
	static {
		TimerTask task=new TimeHashMap().new clearTime();
		new Timer().schedule(task, new Date(), 1000); //一秒运行一次  
	}
	
	/**
	 * 获取当前值
	 */
	public Integer getDataValue(String data){
		return fileNum.get(data);
	}
	
	/**
	 * 更新值
	 */
	public void changeDataValue(String data,Integer value){
		fileNum.put(data, value);
	}
	
	/**
	 * 添加数据
	 */
	public void addData(String data){
		addData(data, 0);
	}
	
	/**
	 * 添加数据
	 * @param data 数据
	 * @param second 时间，单位秒
	 */
	public void addData(String data,int second){
		if(second<0){
			System.out.println("数据存活时间必须不小于0，等于0永久存活");
			return;
		}
		
		Long key;
		if(second==0){
			key=0L;
		}else{
			key=DateUtil.dateToUTC()+second;
		}
		System.out.println("添加数据:"+key+"  "+data);
		if(!dataMap.containsKey(key)){
			dataMap.put(key, new ArrayList<String>());
		}
		List<String> list=dataMap.get(key);
		list.add(data);
		dataMap.put(key, list);
		
		if(!fileNum.containsKey(data)){
			fileNum.put(data, 1);
		}
	}
	
	class clearTime extends TimerTask{

		@Override
		public void run() {
			Long key=DateUtil.dateToUTC();
			System.out.println("清空kye："+key);
			
			if(dataMap.containsKey(key)){
				List<String> list=dataMap.get(key);
				StringBuffer buf=new StringBuffer();
				for(String data:list){
					if(fileNum.containsKey(data)){
						fileNum.remove(data);
						buf.append(data).append(",");
					}
				}
				dataMap.remove(key);
				System.out.println("清空数据：key"+key+" 值:"+buf.toString());
			}else{
				Set<Long> set=dataMap.keySet();
				StringBuffer buf=new StringBuffer();
				for(Long keySet:set){
					buf.append(keySet).append(",");
				}
				System.out.println("key值为:"+buf.toString());
			}
			
		}
		
	}

}
